/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.ccsoft.mantenimiento.modelos;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author misahaelfernandez
 */
@Entity
@Table(name = "UNIDAD")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Unidad.findAll", query = "SELECT u FROM Unidad u")})
public class Unidad implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "COD_UNIDAD")
    private Integer codUnidad;
    @Basic(optional = false)
    @NotNull
    @Column(name = "NUM_BUS")
    private int numBus;
    @Size(max = 8)
    @Column(name = "HABILITACION")
    private String habilitacion;
    @Size(max = 8)
    @Column(name = "PLACA")
    private String placa;
    @Basic(optional = false)
    @NotNull
    @Column(name = "ANIO_FABRICACION")
    private int anioFabricacion;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 32)
    @Column(name = "CHASIS")
    private String chasis;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 32)
    @Column(name = "MOTOR")
    private String motor;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 32)
    @Column(name = "CARROCERIA")
    private String carroceria;
    @Basic(optional = false)
    @NotNull
    @Column(name = "CAPACIDAD")
    private int capacidad;
    @Basic(optional = false)
    @NotNull
    @Column(name = "NUM_PUERTAS")
    private int numPuertas;
    @Basic(optional = false)
    @NotNull
    @Column(name = "NUM_PUERTAS_IZQ")
    private int numPuertasIzq;
    @Column(name = "CADUCA_SOAT")
    @Temporal(TemporalType.DATE)
    private Date caducaSoat;
    @Basic(optional = false)
    @NotNull
    @Column(name = "KILOMETRAJE")
    private long kilometraje;
    @Basic(optional = false)
    @NotNull
    @Column(name = "FECHA_CREACION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaCreacion;
    @Basic(optional = false)
    @NotNull
    @Column(name = "ESTADO")
    private boolean estado;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "unidad", fetch = FetchType.LAZY)
    private List<Mantenimiento> mantenimientoList;
    @JoinColumn(name = "COD_MARCABUS", referencedColumnName = "COD_MARCABUS")
    @ManyToOne(fetch = FetchType.LAZY)
    private MarcaBus codMarcabus;
    @JoinColumn(name = "COD_TIPO_UNIDAD", referencedColumnName = "COD_TIPO_UNIDAD")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TipoUnidad codTipoUnidad;
    @OneToMany(mappedBy = "unidad", fetch = FetchType.LAZY)
    private List<ProgramacionMantenimiento> programacionMantenimientoList;

    public Unidad() {
    }

    public Unidad(Integer codUnidad) {
        this.codUnidad = codUnidad;
    }

    public Unidad(Integer codUnidad, int numBus, int anioFabricacion, String chasis, String motor, String carroceria, int capacidad, int numPuertas, int numPuertasIzq, long kilometraje, Date fechaCreacion, boolean estado) {
        this.codUnidad = codUnidad;
        this.numBus = numBus;
        this.anioFabricacion = anioFabricacion;
        this.chasis = chasis;
        this.motor = motor;
        this.carroceria = carroceria;
        this.capacidad = capacidad;
        this.numPuertas = numPuertas;
        this.numPuertasIzq = numPuertasIzq;
        this.kilometraje = kilometraje;
        this.fechaCreacion = fechaCreacion;
        this.estado = estado;
    }

    public Integer getCodUnidad() {
        return codUnidad;
    }

    public void setCodUnidad(Integer codUnidad) {
        this.codUnidad = codUnidad;
    }

    public int getNumBus() {
        return numBus;
    }

    public void setNumBus(int numBus) {
        this.numBus = numBus;
    }

    public String getHabilitacion() {
        return habilitacion;
    }

    public void setHabilitacion(String habilitacion) {
        this.habilitacion = habilitacion;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public int getAnioFabricacion() {
        return anioFabricacion;
    }

    public void setAnioFabricacion(int anioFabricacion) {
        this.anioFabricacion = anioFabricacion;
    }

    public String getChasis() {
        return chasis;
    }

    public void setChasis(String chasis) {
        this.chasis = chasis;
    }

    public String getMotor() {
        return motor;
    }

    public void setMotor(String motor) {
        this.motor = motor;
    }

    public String getCarroceria() {
        return carroceria;
    }

    public void setCarroceria(String carroceria) {
        this.carroceria = carroceria;
    }

    public int getCapacidad() {
        return capacidad;
    }

    public void setCapacidad(int capacidad) {
        this.capacidad = capacidad;
    }

    public int getNumPuertas() {
        return numPuertas;
    }

    public void setNumPuertas(int numPuertas) {
        this.numPuertas = numPuertas;
    }

    public int getNumPuertasIzq() {
        return numPuertasIzq;
    }

    public void setNumPuertasIzq(int numPuertasIzq) {
        this.numPuertasIzq = numPuertasIzq;
    }

    public Date getCaducaSoat() {
        return caducaSoat;
    }

    public void setCaducaSoat(Date caducaSoat) {
        this.caducaSoat = caducaSoat;
    }

    public long getKilometraje() {
        return kilometraje;
    }

    public void setKilometraje(long kilometraje) {
        this.kilometraje = kilometraje;
    }

    public Date getFechaCreacion() {
        return fechaCreacion;
    }

    public void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    public boolean getEstado() {
        return estado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }

    @XmlTransient
    public List<Mantenimiento> getMantenimientoList() {
        return mantenimientoList;
    }

    public void setMantenimientoList(List<Mantenimiento> mantenimientoList) {
        this.mantenimientoList = mantenimientoList;
    }

    public MarcaBus getCodMarcabus() {
        return codMarcabus;
    }

    public void setCodMarcabus(MarcaBus codMarcabus) {
        this.codMarcabus = codMarcabus;
    }

    public TipoUnidad getCodTipoUnidad() {
        return codTipoUnidad;
    }

    public void setCodTipoUnidad(TipoUnidad codTipoUnidad) {
        this.codTipoUnidad = codTipoUnidad;
    }

    @XmlTransient
    public List<ProgramacionMantenimiento> getProgramacionMantenimientoList() {
        return programacionMantenimientoList;
    }

    public void setProgramacionMantenimientoList(List<ProgramacionMantenimiento> programacionMantenimientoList) {
        this.programacionMantenimientoList = programacionMantenimientoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codUnidad != null ? codUnidad.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Unidad)) {
            return false;
        }
        Unidad other = (Unidad) object;
        if ((this.codUnidad == null && other.codUnidad != null) || (this.codUnidad != null && !this.codUnidad.equals(other.codUnidad))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "ec.edu.espe.ccsoft.mantenimiento.modelos.Unidad[ codUnidad=" + codUnidad + " ]";
    }
    
}
